package com.chromatic.competition.adapter;

import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.chromatic.competition.R;
import com.chromatic.competition.model.UserMessage;
import com.chromatic.competition.utils.TimestampUtil;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.MessageViewHolder> {
    private List<UserMessage> userMessages = new ArrayList<>();
    protected int currentUserId;
    protected int friendId;

    public MessagesAdapter(int currentUserId, int friendId) {
        this.currentUserId = currentUserId;
        this.friendId = friendId;
    }

    @NonNull
    @Override
    public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 创建ViewHolder并关联对应的布局文件
        // 使用LayoutInflater从message_item.xml布局文件创建一个View对象
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_item, parent, false);
        return new MessageViewHolder(view);
    }

    @SuppressLint("ResourceType")
    @Override
    public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
        // 绑定数据到ViewHolder中的视图元素
        // 获取在特定位置的UserMessage对象
        UserMessage userMessage = userMessages.get(position);
        // 获取消息的文本内容
        String messageContent = userMessage.getText();
        // 设置消息TextView的文本为消息内容
        holder.messageTextView.setText(messageContent);
        // 判断是否为当前用户的消息
        boolean isCurrentUserMessage = checkIfCurrentUserMessage(userMessage);
        if (isCurrentUserMessage) {
            // 如果是当前用户的消息，则设置消息TextView的背景为绿色圆角背景
            holder.messageTextView.setBackgroundResource(R.drawable.rounded_green_background);
        } else {
            // 如果不是当前用户的消息，则设置消息TextView的背景为白色圆角背景
            holder.messageTextView.setBackgroundResource(R.drawable.rounded_white_background);
        }
    }

    @Override
    public int getItemCount() {
        // 返回消息列表的大小
        return userMessages.size();
    }

    @SuppressLint("NotifyDataSetChanged")
    public void setMessages(List<UserMessage> userMessages) {
        // 设置消息列表，并通知适配器数据发生变化
        this.userMessages = userMessages;
        notifyDataSetChanged();
    }

    public void addMessage(String messageText) {
        // 添加新的消息到列表末尾，并通知适配器插入了新项
        // 创建新的UserMessage对象，包含当前时间戳、当前用户ID、好友ID、消息内容和发送时间
        UserMessage newUserMessage = new UserMessage(TimestampUtil.getCurrentMicrosecondTimestamp(),
                currentUserId, friendId, messageText, LocalDateTime.now());
        // 将新消息添加到消息列表末尾
        userMessages.add(newUserMessage);
        // 通知适配器插入了新项
        notifyItemInserted(userMessages.size() - 1);
    }

    private boolean checkIfCurrentUserMessage(UserMessage userMessage) {
        // 在这里根据消息的内容或其他属性判断消息是否为当前用户的消息
        // 返回true表示是当前用户的消息，返回false表示不是当前用户的消息
        // 判断逻辑是判断发送者ID是否与当前用户ID一致
        int senderId = userMessage.getSenderId();
        return senderId == currentUserId;
    }

    static class MessageViewHolder extends RecyclerView.ViewHolder {
        TextView messageTextView;

        MessageViewHolder(@NonNull View itemView) {
            super(itemView);
            // 获取ViewHolder中的视图元素
            // 通过findViewById方法找到message_item.xml布局文件中对应的TextView控件
            messageTextView = itemView.findViewById(R.id.messageTextView);
        }
    }
}
